//
//  main.swift
//  15.indirect 和嵌套 enum
//
//  Created by 左忠飞 on 2021/8/16.
//

import Foundation


//定义链表
indirect enum LinkedList<Element:Comparable> {
    case empty
    case node(Element,LinkedList<Element>)
    
    
}

let linkedList = LinkedList.node(1, .node(2, .node(3, .node(4, .empty))))
print(linkedList)

enum MyError:Error {
    case myerror(String)
}


//错误处理,附加的
func add(num:Int)throws -> Int {
    if num == 0 {
        throw MyError.myerror("我的错误")
    }
    return num + 1
}

//可能抛出错误的函数必须用do catch中的try去调用,如果不用do catch捕获错误,那么可能会崩溃.
//还可以使用try?调用,不需要catch来捕获错误,可能会返回nil,需要处理返回值为nil的情况
//还有一种try!,不管有没有捕获异常,如果异常发生都会直接崩溃

do{
    let result = try add(num: 0)
    print(result)
    
}catch MyError.myerror(let str){
    print(str)
}catch{
    print(error)
}
